﻿import QtQuick 2.0

//支持两种构造正则表达式的方法：
// 字面量语法：/pattern/attributes
//创建RegExp对象：new RegExp(pattern, attribues)


Rectangle {

    // "/String/i" i是修饰符，表示忽略大小写， 它的意思是匹配String这个
    //单词，不管大小写。
    //对应的 RegExp("String" "i");或者 new RegExp("string" "i")
    //查找语句如下
Component.onCompleted: {
var str =  new String("I\'m a string");

    console.log(str.match(/String/i)); //string

    console.log(str.search(new RegExp("String", "i"))); //6
    console.log(str.search(RegExp("String", "i"))); // 6

    //1 修饰符
    //"i" 匹配时忽略大小写
    //"g" 查找所有匹配 而非在找到第一个匹配后停止
    // "m" 执行多行匹配

    console.log("修饰符")
    var numberSource = new String("2018-12-24 I got 69");

    //g 全局匹配 否则match找到第一个数字后就会终止
    console.log(numberSource.match(/\d+/g)); //[2018,08,24,69]
    // "/\d+/g"这个正则 除了使用修饰符 还使用到了元字符和量词

    //原字符

    //"\d+"这个模式 \d 是元字符，表示查找数字， + 是量词 表示重复一次或者多次
    // "\d+" 就是匹配一个或者多个连续的数字。

    //常用元字符如下
    //"." 匹配除换行以外的任意字符
    //"\w" 匹配字母 数字 下画线 或汉子
    // "\s" 匹配任意的空白字符
    // "\S" 匹配非空白字符
    //"\d" 匹配数字
    // "\D" 匹配非数字字符
    // "\b" 匹配单词的开始或者结束
    // "^" 匹配字符串的开始
    // "$" 匹配字符串的结束

    //例如： 以"We"开头的所有行，可以使用 "/^We.*/mg"

    console.log("处理字符串")
    var str = "You are dogs; \nWe dogs; \nWe want meat, \nplease.";

    //.*表示匹配换行符以外的任意字符 "*"是量词，表示重复零次或多次；
    // 修饰符：mg表示开启多行匹配模式并且进行全局匹配
    //m修饰符会改变元字符^和$匹配的边界，当使用m时， ^可以匹配每一行的开始，
    //而$符匹配到换行符之前的字符(可以去掉m修饰符来观察匹配结果有何不同)
    var lines = str.match(/^We.*/mg);
    console.log(lines.length);
    console.log(lines);

    console.log("去掉m后的样子");
    var lines1 = str.match(/^We.*/g);
    console.log(lines1.length);
    console.log(lines1);

    //重复
    //"*"重复零次或者更多次
    //"+"重复一次或者更多次
    //"?"重复零次或者一次
    //"{n}"重复n次
    //"{n,}"重复n次或者更多次
    //"{n,m}" 重复n到m次

    //匹配029-xxxxxxxx 029xxxxxxxx这两种格式的固定电话
    //则可以用 "/029-?\d{8}/mg"

    //字符合集
    //匹配没有预定义元字符的字符集（x、y、z) 只需要在方括号中列出他们就行了
    //[xyz]就匹配x y z 中的一个
    //[()（）]匹配（ ） ( )中的一个
    //指定一个字符范围 [0~9]代表含义与\d一样
    //[a-zA-Z]表示26个英文字符
    //匹配（029） xxxxxxxx (029) xxxxxxxx 这两种形式
    // [(（]?029[)）]?\d{8}/mg

    //转义字符
    //匹配*或者.等元字符只需要使用\*或者\.
    //如果要查找\本身 可以使用 "\\"
    //常见 \0 \n \r \t
    //String 类型的search() match() replace() split() 四个方法支持正则表达式

}
}
